#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct Personinfor
{
    char Name[20];
	char Occupation[20];
	char Title[20];
	char Phonenumber[20];
	char Email[20];
}Personinfor;
/*构建联系人信息结构体*/


typedef struct Contact
{
	int count;
	Personinfor data[100];
}Contact;
/*构建通讯录结构体*/

void Input(Contact* p)
{
	assert(p);
	
	if(p->count == 100)
	{
		printf("通讯录已满");
		return;
	}
	
	printf("输入姓名：\n");
	scanf("%s",p->data[p->count].Name);	
	printf("输入职务：\n");
	scanf("%s",p->data[p->count].Occupation);
	printf("输入职称：\n");
	scanf("%s",p->data[p->count].Title);
	printf("输入电话：\n");
	scanf("%s",p->data[p->count].Phonenumber);
	printf("输入邮箱：\n");
	scanf("%s",p->data[p->count].Email);
	p->count++;
	printf("添加成功\n");
}/*添加联系人*/
	


static int Find(Contact* p, char Name[])
{
	assert(p);
	int i=0;
	
	for(i=0; i<p->count; i++)
	{
		if(strcmp(p->data[i].Name,Name) == 0)
		{
			return i;
		}
	}
	
	return -1;
}

void Delete(Contact* p)
{
	assert(p);
	char Name[20];
	
	if(p->count == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	
	printf("请输入要删除的联系人姓名：");
	scanf("%s",Name);
	
	int m;
	m = Find(p, Name);
	
	if(m == -1)
	{
		printf("不存在此联系人\n");
		return;
	}
	
	int i=0;
	
	for(i=m; i<p->data[i+1]; i++)
	{
		p->data[i] = p->data[i+1];
	}
	
	p->count--;
	printf("删除成功\n");
}

void Search(Contact* p)
{
	char Name[20];
	assert(p);
	
	printf("输入要查找人的姓名：\n");
	scanf("%s",Name);
	
	int i;
    int m;            
	m = Find(p, Name);
	
	if(m == -1)
	{
		printf("查无此人\n");
		return;
	}
	
	printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","职务","职称","电话","邮箱");
	printf("%-20s%-20s%-20s%-20s%-20s\n",p->data[i].Name,p->data[i].Occupation,p->data[i].Title,p->data[i].Phonenumber,p->data[i].Email);
}


void Update(Contact* p)
{
	char Name[20];
	assert(p);
	printf("请输入要修改联系人的姓名：\n");
	scanf("%s",Name);
	int m;
	m = Find(p, Name);
	if(m == -1)
	{
		printf("联系人不存在\n");
		return;
	}
	printf("输入姓名：\n");
	scanf("%s",p->data[p->count].Name);	
	printf("输入职务：\n");
	scanf("%s",p->data[p->count].Occupation);
	printf("输入职称：\n");
	scanf("%s",p->data[p->count].Title);
	printf("输入电话：\n");
	scanf("%s",p->data[p->count].Phonenumber);
	printf("输入邮箱：\n");
	scanf("%s",p->data[p->count].Email);
	printf("修改成功\n");
}

void Display(Contact* p)
{
	assert(p);
	
	if(p->count == 0)
	{
		printf("通讯录为空");
		return;
	}
	
	int i=0;
	printf("%-20s%-20s%-20s%-20s%-20s\n","姓名","职务","职称","电话","邮箱");
	
	for(i=0; i<p->count; i++)
	{
		printf("%-20s%-20s%-20s%-20s%-20s\n",p->data[i].Name,p->data[i].Occupation,p->data[i].Title,p->data[i].Phonenumber,p->data[i].Email);
	}
}

void Sort(Contact* p)
{
	
}

void Exit(Contact* p)
{
	system("cls");
	printf("已退出");
}



int main()
{
	Contact con;
	Contact(&con);  //初始化
	
	int n;
	
	printf("----------菜单----------\n");
	printf("-    1.添加联系人      -\n");
	printf("-    2.删除联系人      -\n");
	printf("-    3.修改联系人      -\n");
	printf("-    4.显示联系人      -\n");
	printf("-    5.查找联系人      -\n");
	printf("-    6.排序并输出      -\n");
	printf("-    7.退出            -\n");
	printf("------------------------\n");
	printf("请输入：\n");
	scanf("%s",&n);
	
	switch(n)
	{
		case '1':
			Input(&con);
			break;
		case '2':
			Delete(&con);
			break;
		case '3':
			Update(&con);
			break;
		case '4':
			Display(&con);
			break;
		case '5':
			Search(&con);
			break;
		case '6':
			Sort(&con);
			break;
		case '7':
			Exit(&con);
			break;
		default:
			printf("输入错误");
			break;
	}
	return 0;
	
}

